image: Actually report a request mode
authorBenjamin Otte <otte@redhat.com>
Tue, 3 Apr 2018 12:14:37 +0000 (14:14 +0200)
committerBenjamin Otte <otte@redhat.com>
Thu, 5 Apr 2018 12:57:10 +0000 (14:57 +0200)
This makes height-for-width actually work for GtkImage.

I'm kinda ashamed I didn't notice it not working before.

gtk/gtkiconhelper.c
gtk/gtkiconhelperprivate.h
gtk/gtkimage.c

index ca7e308870e5518220895c38df3ffe5861c8ca41..7c2e80abc46b4265224a0df210030a4dcc37f520 100644 (file)
@@ -470,6 +470,22 @@ gtk_icon_helper_new (GtkCssNode *css_node,
   return self;
 }
 
+GtkSizeRequestMode
+gtk_icon_helper_get_request_mode (GtkIconHelper *self)
+{
+  switch (gtk_image_definition_get_storage_type (self->def))
+    {
+    case GTK_IMAGE_PAINTABLE:
+      return GTK_SIZE_REQUEST_HEIGHT_FOR_WIDTH;
+
+    case GTK_IMAGE_ICON_NAME:
+    case GTK_IMAGE_GICON:
+    case GTK_IMAGE_EMPTY:
+    default:
+      return GTK_SIZE_REQUEST_CONSTANT_SIZE;
+    }
+}
+
 void
 gtk_icon_helper_measure (GtkIconHelper *self,
                          GtkOrientation orientation,
index b2d7b819e99e6bacaa9aee2331faec814f923774..9d770d5902b242e38cd0724abdbb789a2d6a0727 100644 (file)
@@ -64,6 +64,7 @@ GdkPaintable *_gtk_icon_helper_peek_paintable (GtkIconHelper *self);
 GtkImageDefinition *gtk_icon_helper_get_definition (GtkIconHelper *self);
 const gchar *_gtk_icon_helper_get_icon_name (GtkIconHelper *self);
 
+GtkSizeRequestMode gtk_icon_helper_get_request_mode (GtkIconHelper *self);
 void gtk_icon_helper_measure (GtkIconHelper *self,
                               GtkOrientation orientation,
                               int            for_size,
index f5054495f2ca7dc34e85130db7c6f62a32faa1f2..f4ef1f9961920ba60059d21c06c808a24d6677a9 100644 (file)
@@ -136,6 +136,15 @@ static GParamSpec *image_props[NUM_PROPERTIES] = { NULL, };
 
 G_DEFINE_TYPE_WITH_PRIVATE (GtkImage, gtk_image, GTK_TYPE_WIDGET)
 
+static GtkSizeRequestMode
+gtk_image_get_request_mode (GtkWidget *widget)
+{
+  GtkImage *image = GTK_IMAGE (widget);
+  GtkImagePrivate *priv = gtk_image_get_instance_private (image);
+
+  return gtk_icon_helper_get_request_mode (priv->icon_helper);
+}
+
 static void
 gtk_image_class_init (GtkImageClass *class)
 {
@@ -150,6 +159,7 @@ gtk_image_class_init (GtkImageClass *class)
 
   widget_class = GTK_WIDGET_CLASS (class);
   widget_class->snapshot = gtk_image_snapshot;
+  widget_class->get_request_mode = gtk_image_get_request_mode;
   widget_class->measure = gtk_image_measure;
   widget_class->unrealize = gtk_image_unrealize;
   widget_class->style_updated = gtk_image_style_updated;